﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
using System.Data.SqlClient;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Ven_Tarjeta_Placa_DetDAO
    {

        private AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();
        public int UltimoNumeroDet()
        {
            int max = 0;

            try
            {
                max = ContextoDeObjs.T_VEN_TARJETA_PLACA_DET.Select(x => x.ID_TARJETA_PLACA_DET).Max();

            }
            catch (Exception)
            {
                return max;
            }

            return max;

        }

        public bool Insertar(int id_tarjeta_placa_det,int id_tarjeta_placa_cab,int id_org_vta,int nro_factura,int nro_posicion) {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand("INSERT INTO T_VEN_TARJETA_PLACA_DET (ID_TARJETA_PLACA_DET,ID_TARJETA_PLACA_CAB,ID_ORG_VTA,NRO_FACTURA,NRO_POSICION)VALUES(" + id_tarjeta_placa_det + "," + id_tarjeta_placa_cab + "," + id_org_vta + "," + nro_factura + "," + nro_posicion + ")");
                Globales.msjAplicacion = "c";

                return true;

            }
            catch (SqlException ex) {

                Globales.msjSql = ex.Message;
                return false;
            }
            catch (Exception)
            {


                return false;
            }

        }

        public List<T_VEN_TARJETA_PLACA_DET> SeleccionarDetalle(int ID_TARJETA_PLACA_CAB)
        {

            List<T_VEN_TARJETA_PLACA_DET> lista = new List<T_VEN_TARJETA_PLACA_DET>();

            try
            {
                var q = from v in ContextoDeObjs.T_VEN_TARJETA_PLACA_DET
                        where v.ID_TARJETA_PLACA_CAB == ID_TARJETA_PLACA_CAB
                        select v;

                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }



        public IEnumerable<Object> busquedaxCliente(string nro_folio)
        {

            IEnumerable<Object> lista = new List<Object>();


            try
            {
                var q = from v in ContextoDeObjs.TH_VENTA
                        from tpc in ContextoDeObjs.T_VEN_TARJETA_PLACA_CAB
                        from tpd in ContextoDeObjs.T_VEN_TARJETA_PLACA_DET
                        from c in ContextoDeObjs.TD_CLIENTE

                        from gd in ContextoDeObjs.T_MAE_TABLA_GENERAL_DET
                        from gc in ContextoDeObjs.T_MAE_TABLA_GENERAL_CAB

                        join ofv in ContextoDeObjs.TD_OFICINA_VENTA on v.ID_OFI_VTA equals ofv.ID_OFI_VTA
                        where v.ID_CANAL_DISTRIB == 3 &&
                          (new int[] { 1, 2, 3, 4 }).Contains(v.TD_MATERIAL.ID_GRUPO_ARTICULO)
                        where tpd.ID_ORG_VTA == v.ID_ORG_VTA && tpd.NRO_FACTURA == v.NRO_FACTURA
                        && tpd.NRO_POSICION == v.NRO_POSICION && tpc.ID_TARJETA_PLACA_CAB == tpd.ID_TARJETA_PLACA_CAB &&
                        v.ID_CLIENTE == c.ID_CLIENTE && v.NRO_FOLIO==nro_folio

                          && tpc.ID_TRAMITADOR == gd.ID_GENERAL_DET
                        && gd.ID_GENERAL_CAB == gc.ID_GENERAL_CAB
                        && gc.NOM_TABLA == "T_VEN_TRAMITADOR_MAE"

                        orderby
                          v.NRO_FACTURA descending
                        select new
                        {
                            
                            v.ID_ORG_VTA,
                            v.NRO_FACTURA,
                            v.NRO_POSICION,
                            v.NRO_FOLIO,
                            v.FEC_FACTURA,
                            v.DES_MODELO,
                            v.IMP_CANTIDAD,
                            v.IMP_VENTA_SOLES,
                            v.NRO_MOTOR,
                            v.NRO_VIN,
                            v.NRO_LOTE,
                            v.NRO_PEDIDO_SAP,
                            v.NRO_CAJA,                      
                            tpd.FEC_RECEPCION_PLACA,
                            tpd.ID_TARJETA_PLACA_DET,
                            tpc.ID_TARJETA_PLACA_CAB,
                            tpd.FEC_RECEPCION_TARJETA,
                            tpc.ID_TRAMITADOR,
                            tpc.FEC_INICIO_TRAMITE,
                            tpc.OBSERVACIONES,
                            c.NOM_COMERCIAL,
                            v.REF_EMBARQUE,
                            tpd.NRO_PLACA,
                            tpd.NRO_TITULO,
                            gd.DES_CORTA,
                            NRO_POLIZA =
                              ((from tdt in ContextoDeObjs.T_IMP_DUA_TITULO
                                where
                                  tdt.NroPedido == v.REF_EMBARQUE
                                select new
                                {
                                    tdt.NroPoliza
                                }).FirstOrDefault().NroPoliza),
                            FEC_POLIZA = (System.DateTime?)
                              ((from tdt in ContextoDeObjs.T_IMP_DUA_TITULO
                                where
                                  tdt.NroPedido == v.REF_EMBARQUE
                                select new
                                {
                                    tdt.Fecha
                                }).FirstOrDefault().Fecha),
                            DES_CLASE_FACTURA = v.TD_CLASE_FACTURA.DES_CLASE_FACTURA.ToUpper()


                        };

                lista = q.ToList();

            }
            catch (Exception)
            {

                throw;
            }
            return lista;

        }

        public bool Actualizar(int id_tarjeta_placa_det, int id_tarjeta_placa_cab,string fec_recepcion_tarjeta,string nro_placa,string fec_recepcion_placa,string nro_titulo)
        {

            try
            {
                ContextoDeObjs.ExecuteStoreCommand(String.Format("UPDATE  T_VEN_TARJETA_PLACA_DET SET FEC_RECEPCION_TARJETA={0},NRO_PLACA='{1}', FEC_RECEPCION_PLACA={2} ,NRO_TITULO='{3}' WHERE  ID_TARJETA_PLACA_CAB={4} AND ID_TARJETA_PLACA_DET={5}", (fec_recepcion_tarjeta == "" ? "NULL" : "'" + Convert.ToDateTime(fec_recepcion_tarjeta).ToString("yyyy/MM/dd") + "'"), nro_placa, (fec_recepcion_placa == "" ? "NULL" : "'" + Convert.ToDateTime(fec_recepcion_placa).ToString("yyyy/MM/dd") + "'"),nro_titulo, id_tarjeta_placa_cab, id_tarjeta_placa_det));

                return true;
            }
            catch (SqlException ex) {

                Globales.msjSql = ex.Message;
                return false;
            }
            catch (Exception)
            {


                return false;
            }

        }
    
    }
}
